昨天在1295題中用指標操作陣列,練習了 *(p + i) 的存取方式。今天我們要再往前一步:有些題目不只是操作現有的陣列,還需要「建立一個新的陣列」並回傳,這時候就必須用到動態記憶體配置(malloc)。
leetcode977. Squares of a Sorted Array 題目介紹
給一個非遞減排序的整數陣列,回傳「每個元素平方後,仍然是非遞減排序」的新陣列。
範例:
輸入:nums = [-4,-1,0,3,10]
平方後: [16,1,0,9,100]
排序後: [0,1,9,16,100]
輸出: [0,1,9,16,100]
心得
這一題讓我第一次把 malloc 實際用在 LeetCode 題目裡:
int* result = (int*)malloc(numsSize * sizeof(int));
這行就是在 堆積區(Heap) 動態配置一個陣列,大小和輸入陣列相同
在C語言裡,如果我要回傳一個陣列,就不能用一般的區域陣列(會在函式結束後被釋放),必須用 malloc 來確保記憶體還存在。
題目要求「假設呼叫者會呼叫 free()」,這也是為什麼在函式內 malloc 是安全的
透過這題,我把 指標、陣列、動態記憶體 串起來了,也真正感受到為什麼學指標是必要的。